import java.util.Arrays;
import java.util.PriorityQueue;

public class MinmumNumberOfHost {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 计算成功举办活动需要多少名主持人
     * @param n int整型 有n个活动
     * @param startEnd int整型二维数组 startEnd[i][0]用于表示第i个活动的开始时间，startEnd[i][1]表示第i个活动的结束时间
     * @return int整型
     */
    public int minmumNumberOfHost (int n, int[][] startEnd) {
        // write code here
        // 现根据开始时间进行排序
        // 然后看当前比赛的开始时间是否大于等于前面比赛最早结束的活动的时间
        // 如果大于等于,那么不需要额外的主持人，否则就需要一个额外的主持人
        // 因为我们先按照活动的开始时间进行排序了,并且我们判断是否需要额外的主持人只需要
        // 判断当前活动的开始时间是否大于等于之前最早结束的活动的结束时间，所以我们只需要
        // 知道之前活动的结束时间就可以了
        Arrays.sort(startEnd, (a, b) -> {
            return a[0] <= b[0] ? -1 : 1;
        });
        PriorityQueue<Integer> queue = new PriorityQueue<>();
        queue.offer(startEnd[0][1]);
        for (int i = 1; i < n; i++) {
            int a = startEnd[i][0], b = startEnd[i][1];
            if (a >= queue.peek()) {
                queue.poll();
            }
            queue.offer(b);
        }
        return queue.size();
    }
}
